#include<iostream>
template<typename T>
typename std::enable_if<(sizeof(T)>4)>::type
foo(T&&){
    std::cout<<"yes"<<std::endl;
}
template<typename T>
std::enable_if_t<(sizeof(T)>4)>
    foo(){/*todo*/
               // return T();
            }
template<typename T,
    typename = std::enable_if_t<(sizeof(T)>4)>>
            void bar(){}
template<typename STR,//C++17 check whether this type is convertible to string
typename = std::enable_if_t<std::is_convertible_v<STR,std::string>>>//also std::is_convertible<>::value
    void bar(STR&&){
        std::cout<<"STR"<<std::endl;
            
    }
    template<typename T,typename=int>
    void T1(){}
int main(){
    foo(3.4);
    foo<double>();
    bar<double>();
    bar("C");
    T1<int>();
//    foo(3);
    return 0;
}
